Sơ lược về cú pháp XML

Cú pháp XML cơ bản cho một phần tử là

<tên thuộc_tính="giá trị">nội dung</tên>
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <công_thức_nấu_ăn tên="bánh mì" thời_gian_chuẩn_bị="5 phút" thời_gian_nấu="3 tiếng"> 3  <title>Bánh mì cơ bản</title> 4  <nguyên_liệu lượng="3" đơn_vị="ca">Bột mì</nguyên_liệu> 5  <nguyên_liệu lượng="7" đơn_vị="gram">Men</nguyên_liệu> 6  <nguyên_liệu lượng="1.5" đơn_vị="ca" trạng_thái="ấm">Nước</nguyên_liệu> 7  <nguyên_liệu lượng="1" đơn_vị="thìa cà phê">Muối</nguyên_liệu> 8  <chỉ_dẫn> 9  <bước>Trộn tất cả các nguyên liệu với nhau và nhào kĩ</bước>10  <bước>Phủ một mảnh vải, ủ một tiếng đồng hồ trong phòng ấm.</bước>11  <bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước>12  </chỉ_dẫn>13 </công_thức_nấu_ăn>

Dòng đầu tiên là Khai báo XML (XML declaration): đó là một dòng không bắt buộc, với nhiệm vụ thông báo phiên bản XML đang được sử dụng (thường là phiên bản 1.0), và còn có thể chứa thông tin về mã hóa ký tự và các phụ thuộc bên ngoài.

Phần còn lại của tài liệu này chứa các phần tử lồng nhau, một số phần tử trong đó có các thuộc tính và nội dung. Một phần tử thường bao gồm hai thẻ (tag), một thẻ bắt đầu và một thẻ kết thúc, có thể bao quanh văn bản và các phần tử khác. Thẻ bắt đầu bao gồm một cái tên đặt trong một cặp ngoặc nhọn, như "<bước>"; thẻ kết thúc bao gồm chính cái tên đó đặt trong một cặp ngoặc nhọn, với một dấu gạch chéo đứng trước, như "</bước>". Nội dung của phần tử là tất cả những gì nằm giữa thẻ bắt đầu và thẻ kết thúc, bao gồm văn bản và các phần tử (con) khác. Dưới đây là một phần tử XML hoàn chỉnh, với thẻ bắt đầu, nội dung văn bản, và thẻ kết thúc:

11  <bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước>

Bên cạnh nội dung, một phần tử có thể chứa các thuộc tính — các cặp tên - giá trị được đặt trong thẻ bắt đầu, ngay sau tên phần tử. Giá trị của thuộc tính phải được đặt trong cặp nháy đơn hoặc nháy kép, mỗi tên thuộc tính chỉ được xuất hiện một lần trong mỗi phần tử.

4  <nguyên_liệu lượng="3" đơn_vị="ca">Bột mì</nguyên_liệu>

Trong ví dụ này, phần tử nguyên_liệu có hai thuộc tính: lượng với giá trị "3", và đơn vị với giá trị "ca". Trong cả hai trường hợp, cũng như tên và nội dung của các phần tử, tại cấp độ đánh dấu, tên và giá trị của các thuộc tính cũng chỉ là dữ liệu text — các giá trị "3" và "ca" không phải một số lượng và một đơn vị đo lường mà chỉ là các chuỗi ký tự mà tác giả tài liệu có thể dùng để biểu diễn những thứ đó.

Ngoài văn bản, các phần tử còn có thể chứa các phần tử khác:

 8  <chỉ_dẫn> 9  <bước>Trộn tất cả các nguyên liệu với nhau và nhào kĩ</bước>10  <bước>Phủ một mảnh vải, ủ một tiếng đồng hồ trong phòng ấm.</bước>11  <bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước>12  </chỉ_dẫn>

Trong đó, phần tử chỉ_dẫn chứa ba phần tử bước. XML đòi hỏi rằng các phần tử phải được lồng nhau một cách đúng đắn — các phần tử không được có phần xen vào nhau. Ví dụ, đoạn dưới đây không phải XML định dạng đúng (well-formed XML) vì các phần từ em và strong xen vào nhau:

1  <!-- SAI! ĐỊNH DẠNG KHÔNG ĐÚNG! -->2  <p>Normal <em>emphasized <strong>strong emphasized</em> strong</strong></p>

Mỗi tài liệu XML phải có đúng một phần tử gốc tại bậc trên cùng (còn gọi là phần tử văn bản), do đó đoạn sau cũng sẽ là một tài liệu XML định dạng sai:

1 <?xml version="1.0" encoding="UTF-8"?>2 <!-- SAI! ĐỊNH DẠNG KHÔNG ĐÚNG! -->3 <đồ vật>Đồ vật thứ nhất</đồ vật>4 <đồ vật>Đồ vật thứ hai</đồ vật>

XML cung cấp cú pháp đặc biệt để biểu diễn một phần tử với nội dung rỗng. Thay vì viết một thẻ bắt đầu và một thẻ kết thúc ngay sau đó, tài liệu có thể chứa thẻ phần tử rỗng mà trong đó dấu gạch chéo đứng ngay sau tên phần tử. Hai ví dụ sau là tương đương về chức năng:

<foo></foo></div>:<source lang="xml" enclose="div" style="font-size:1.2em;" ><foo />

XML cung cấp hai phương pháp biểu diễn các ký tự đặc biệt: các tham chiếu thực thể (entity reference) và các tham chiếu ký tự số (numeric character reference).

Trong XML, một thực thể (entity) là một thân dữ liệu được đặt tên với dữ liệu thường là text, chẳng hạn một ký tự đặc biệt.

Một tham chiếu thực thể là một ký hiệu đại diện cho thực thể đó. Nó bao gồm tên của thực thể với dấu ("&") đứng trước và một dấu chấm phảy (";") đứng sau. XML có năm thực thể đã được khai báo trước:

  • &amp; (&)
  • &lt; (<)
  • &gt; (>)
  • &apos; (')
  • &quot; (")

Dưới đây là một ví dụ sử dụng một thực thể XML khai báo trước để biểu diễn dấu & trong tên "AT&T":

<tên-công-ty>AT&amp;T</tên-công-ty>

Nếu cần khai báo thêm các thực thể khác, việc đó được thực hiện tại DTD của tài liệu. Sau đây là một ví dụ cơ bản về khai báo thực thể tại một DTD nhỏ nội bộ. Các thực thể được khai báo có thể mô tả các ký tự đơn hay các đoạn văn bản, và có thể tham chiếu lẫn nhau.

1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE example [3 	<!ENTITY copy "©">4 	<!ENTITY copyright-notice "Copyright © 2006, XYZ Enterprises">5 ]>6 <root>7 	&copyright-notice;8 </root>

Khi xem tại một trình duyệt thích hợp, tài liệu XML trên sẽ hiện ra như sau:

<root> Copyright © 2006, XYZ Enterprises </root>

Các tham chiếu ký tự số trông giống như các thực thể. Nhưng thay cho một cái tên, chúng gồm một ký tự "#" và theo sau là một con số. Con số (theo hệ thập phân hoặc hệ cơ số 16 với tiền tố "x") đại diện cho một mã hiệu Unicode (Unicode code point), và thường được dùng để đại diện cho các ký tự không dễ gõ trên máy tính, chẳng hạn một chữ cái Ả-rập trong một tài liệu được soạn trên một máy tính châu Âu. Dấu & trong ví dụ "AT&T" có thể được biểu diễn như sau (số 38 thập phân và 26 trong hệ cơ số 16 đều đại diện cho giá trị Unicode của dấu &):

1 <tên-công-ty>AT&#38;T</tên-công-ty>2 <tên-công-ty>AT&#x26;T</tên-công-ty>

Còn có nhiều quy tắc khác cần thiết cho việc viết các tài liệu XML định dạng đúng, chẳng hạn một tên XML có thể chứa các ký tự nào, nhưng phần giới thiệu ngắn này chỉ cung cấp các kiến thức căn bản để đọc và hiểu được nhiều tài liệu XML.